تا قبل از نسخه 21c، صرفا می توانستیم از سه عملگر مجموعه ای INTERSECT، MINUS و UNION [ALL] در اوراکل استفاده کنیم اما در نسخه 21c دو عملگر جدید EXCEPT و EXCEPT ALL به این مجموعه اضافه شدند که این دو عملگر معادل عملگرهای MINUS و MINUS ALL هستند و صرفا به دلیل استفاده از عبارتهای EXCEPT و EXCEPT ALL در دیتابیسهای دیگر، اوراکل هم این دو عملگر را به مجموعه عملگرهای خود اضافه کرده است.
مجددا تاکید می شود که در عمل تفاوتی بین EXCEPT و MINUS وجود ندارد و حتی در صورت استفاده از عملگر EXCEPT، اوراکل در زمان اجرای پرس و جو، در مرحله Query Transformation، عملگر EXCEPT را به MINUS تبدیل می کند.
با این توضیحات، در شرایط زیر، برای برگرداندن رکوردهایی که در t1.c1 وجود دارند اما در t2.c1 وجود ندارد(با حذف رکوردهای تکراری!!) دو انتخاب داریم، عملگرEXCEPT و عملگر MINUS:
select t1.c1 from t1
MINUS
select t2.c1 from t2;
D
Z
select t1.c1 from t1
EXCEPT
select t2.c1 from t2;
D
Z
با فعال کردن تریس هم خواهیم دید که در زمان استفاده از عملگر EXCEPT، اوراکل کماکان از عملگر MINUS استفاده می کند:
user_id=0 user_name=SYS module=sqlplus@oLinux7 (TNS V1-V3) action=
sql_id=3tkx1k2a2pphc plan_hash_value=1699042171(6545537b) problem_type=3 command_type=3
----- Current SQL Statement for this session (sql_id=3tkx1k2a2pphc) -----
select t1.c1 from t1
EXCEPT
select t2.c1 from t2
Final query after transformations:******* UNPARSED QUERY IS *******
(SELECT "T1"."C1" "C1" FROM "SYS"."T1" "T1")MINUS (SELECT "T2"."C1" "C1" FROM "SYS"."T2" "T2")
در نسخه 21c، علاوه بر اضافه شدن دو عملگر EXCEPT و EXCEPT ALL، امکان استفاده
برچسب: نویسنده: خنجی تاريخ: دوشنبه 26 ارديبهشت 1401 ساعت: 17:49
برچسب: نویسنده: خنجی تاريخ: دوشنبه 19 ارديبهشت 1401 ساعت: 20:48